package com.work.yshop.mvp.contract;

import android.content.Context;
import com.work.yshop.model.Article;

import java.util.List;

/**
 * 农友圈文章的MVP契约接口
 */
public interface ArticleContract {

    // 标签类型常量
    int TAB_FOLLOW = 0;   // 关注
    int TAB_LATEST = 1;   // 最新
    int TAB_MINE = 2;     // 我的
    
    /**
     * View接口，由Fragment实现
     */
    interface View {
        /**
         * 显示加载中
         */
        void showLoading();

        /**
         * 隐藏加载中
         */
        void hideLoading();

        /**
         * 显示文章列表
         */
        void showArticles(List<Article> articles);

        /**
         * 显示空视图
         */
        void showEmptyView();

        /**
         * 显示错误信息
         */
        void showError(String message);
        
        /**
         * 显示发布结果
         */
        void showPublishResult(boolean success, String message);
        
        /**
         * 获取上下文
         */
        Context getContext();
    }

    /**
     * Presenter接口，由Presenter实现
     */
    interface Presenter {
        /**
         * 绑定View
         */
        void attachView(View view);

        /**
         * 解绑View
         */
        void detachView();

        /**
         * 加载文章列表
         */
        void loadArticles();
        
        /**
         * 根据标签类型加载文章
         * @param tabType 标签类型：关注、最新、我的
         */
        void loadArticlesByTab(int tabType);

        /**
         * 刷新文章列表
         */
        void refreshArticles();
        
        /**
         * 刷新指定标签页的文章
         * @param tabType 标签类型
         */
        void refreshArticlesByTab(int tabType);

        /**
         * 文章点击事件
         */
        void onArticleClick(Article article);

        /**
         * 发布文章
         */
        void publishArticle(Article article);
        
        /**
         * 搜索文章
         * @param keyword 搜索关键词
         */
        void searchArticles(String keyword);
    }

    /**
     * Model接口，由Model实现
     */
    interface Model {
        /**
         * 获取文章列表
         */
        List<Article> getArticleList();
        
        /**
         * 根据标签类型获取文章列表
         * @param tabType 标签类型：关注、最新、我的
         */
        List<Article> getArticleListByTab(int tabType);
        
        /**
         * 搜索文章
         * @param keyword 搜索关键词
         */
        List<Article> searchArticles(String keyword);

        /**
         * 保存文章
         */
        boolean saveArticle(Article article);
    }
} 